/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Modelo;

import Controlador.Controlador;

/**
 * Dado un fichero con un tracklog, suministramos a la vista Geomantes
 * datos de latitud, longitud, altura, fecha y hora en tiempo real
 * @author Doria
 */
public class ConfigurationFichero {

    /* Instancia de la clase que nos permite mantener la unicidad de la misma */
    private static ConfigurationFichero INSTANCIA = null;
    /* Nombre del fichero de donde realizamos la lectura */
    private String nombreFichero;
    /* Interfaz donde pintamos los datos suministrados por esta clase */
    private Controlador controlador;
    /* Variables booleanas mediante las cuales suspenderemos el thread o lo pararemos */
    private boolean estadothread;
    private boolean pararthread;

    private Thread proveedorDatos;

    /*
     * El constructor es privado para forzar a usar el Factory Method
     */
    private ConfigurationFichero() {
        estadothread = true;
        pararthread = false;
    }

    /**
     * Metodo FactoryMethod que nos devuelve una instancia de la clase.
     * @return
     */
    public static ConfigurationFichero getInstance() {
        if (INSTANCIA == null) {
            INSTANCIA = new ConfigurationFichero();
        }
        return INSTANCIA;
    }

    public void conexion(String nombre) {
        this.nombreFichero = nombre;
        //controlador = Controlador.getControlador();
        estadothread = true;
        pararthread = false;
        /**
         * Creamos un hilo que envia datos al interfaz.
         */
      /*  proveedorDatos = new Thread() {

            public void run() {
                try {
                    pararthread = false;
                    FileConnection fc = (FileConnection) Connector.open(nombreFichero);
                    if (!fc.exists()) {
                        controlador.muestraAlerta("Problema al abrir el fichero " +
                                "de la ruta ya que no existe");
                        throw new IOException("El fichero no existe");
                    }
                    InputStream inputStreamTxt = null;
                    inputStreamTxt = fc.openInputStream();
                    double distancia = 0;
                    double velocidad = 0;
                    FicheroDatos infoLinea = new FicheroDatos();
                    FicheroDatos infoLineaAntiguo = new FicheroDatos();

                    infoLinea.lecturaFichero(inputStreamTxt);

                    while ((infoLinea.getLatitud() != -1) && (infoLinea.getLongitud() != -1) &&
                            (infoLinea.getAltitud() != 777) && (!pararthread)) {
                        while (estadothread == false) {
                            ;
                        }
                        int[] datosEntrada = CalculosDatos.calcular(infoLinea);
                        controlador.repaintGeomantes(infoLinea, datosEntrada, velocidad, distancia);
                        infoLineaAntiguo.clone(infoLinea);
                        infoLinea.lecturaFichero(inputStreamTxt);

                        try {
                            if (infoLinea.getHora().compareTo("") == 0) {
                                distancia = 0;
                                velocidad = 0;
                            } else {
                                int dif = Util.diferenciaMilisegundos(infoLinea.getHora(),
                                        infoLineaAntiguo.getHora());
                                distancia = Utils.Util.distCosineLaw(infoLinea, infoLineaAntiguo);
                                velocidad = Utils.Util.velocidad(distancia, dif / 1000);
                                sleep(dif);
                            }
                        } catch (Exception e) {
                            controlador.muestraAlerta("Problema en " +
                                    "ConfigurationFichero al hacer " +
                                    "calcular distancia y velocidad");
                            e.printStackTrace();
                        }
                    }
                    try {
                        inputStreamTxt.close();
                        fc.close();
                    } catch (Exception ex) {
                        controlador.muestraAlerta("Problema en ConfigurationFichero " +
                                "al intentar cerrar el inputStream");
                        ex.printStackTrace();
                    }
                } catch (Exception ex) {
                    controlador.muestraAlerta("Problema en ConfigurationFichero " +
                            "al hacer el hilo de lectura de fichero");
                    ex.printStackTrace();
                }
            }
        };
        proveedorDatos.start();*/
    }

    public void estadoThread(boolean b) {
        estadothread = b;
    }

    public boolean getEstado() {
        return estadothread;
    }

    public void pararThread(boolean b) {
        pararthread = b;
    }
}
